An important aspect of the design and development of a computer program is debugging, which is intended to locate and identify errors in a program under development. Typically, a programmer uses another program commonly known as a “debugger” to debug a program under development. A user may debug different programs or may repetitively debug the same program during multiple debugger sessions. The debugger is controlled by reading commands from a debugger script or by receiving debugger instructions from the user.
Conventional debuggers typically support two primary operations to assist a programmer. A first operation supported by conventional debuggers is a step function which permits a programmer to process program lines (also referred to as instructions or statements), one at a time in a program and see the results of each instruction upon completion. A second operation supported by conventional debuggers is the breakpoint operation which permits a programmer to define a breakpoint as a precise instruction (identified by an instruction line number) at which execution of a program can be (conditionally or unconditionally) halted.
The evaluation of a program and especially the recreation of program faults (also known as “defects”) can require that a predefined program execution path is followed. In many cases the predefined execution path requires that certain values are assigned to various data entities (such as but not limited to variables). In order to guarantee that the program is executed according to the predefined execution path multiple manual debugger sessions can be executed. During a manual debugger session the program and an associated debugger are executed to provide debugger session results. The debugger session results are manually analyzed by a user. The analysis of the debugger session can lead to an alteration of data entities that are utilized during the debugger session.
Various evaluation tests an action to be taken at a certain breakpoint only if that breakpoint was reached after another breakpoint, or combination of other breakpoints. Keeping track of the history of reached breakpoints is, today, a tedious manual chore.
There is a need to provide efficient methods for evaluating programs.